


/**
*	jquery 广告扩展 支持 Google baidu 支持几乎所有的广告商 支持延迟载入统计代码等....
*
*	by: http://www.lianyue.org/  恋月
*
*	1 参数 开始 回调函数
*	2 参数 完成 回调函数
*
*
*	2013-04-14 开始写广告延迟加载代码
*	2013-11-13 更新直接执行html js
*	2013-11-14 更新 js 执行方法 jquery 低于 1.7.1 也能执行js
*
*	$('#ad').ad( function(){
*		 document.write( "html代码执行js需要 <script> 标签 如果不是在js 文件里面 <script> 标签 要写成 '<scr'+'ipt>'   " );
*	});
*
**/
;(function($){
	var ad = [], o = [document.write,document.writeln], run = false, load = false;
	
	
	var handle = function(){
		run = true;
		if ( !ad.length ) {
			run = false;
			return false;
		}
		var a = ad.shift(), b = '', j = [], u = [];
		
		
		
		// 修改2个函数
		document.write = function(){
			$.each( arguments, function( k, v ) {
				b += v;
			});
		};
		document.writeln = function() {
			$.each( arguments, function( k, v ){
				b += v + "\n";
			});
		}
		
		
		
		
		
		var inner = function( c ) {
			if ( !b ) {
				return;
			}
			var h = b, ji = 0, id, js;
			b = '';
			h = h.replace( /<script[^>]*?>((.|\n|\r)*?)\<\s*\/script\>/gim, function ( w ) {
				var str = 'qwertyuiopasdfghjklzxcvbnm1234567890', k = '_';
				str = str.split('');
				for( i = 0;  i < 20; ++i ) {
					k += str[Math.floor( Math.random() * str.length )];
				}
				id = '#' + k ;
				u.push( id );
				
				
				// 储存 js
				if ( ( js = w.replace( /^<script[^>]*?\s*src\s*\=\s*(?:['"]([^'"]+)['"]|([^ \r\n>]+))(?:.|\n|\r)+$/im, "$1$2" ) ) != w ) {
					j.splice( ji, 0, [id, false, js] );
					++ji;
				} else if ( ( js = w.replace( /^<script[^>]*?>((.|\n|\r)*?)\<\s*\/script\>$/im, "$1" ) ) != w ) {
					j.splice( ji, 0, [id, true, js.replace( /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, "" )] );
					++ji;
				}
				return '<span id="'+ k +'" style="display: none;"></span>';
			});
			c ? $( c ).before(h) : $(a[0]).append( h );
 		}
		
		
		
		
		
		
		// 执行 init
		a[1].apply(a[0]);		
		inner();
		
		// 执行函数
		forcall = function() {
			if ( !j.length ) {
				
				$.each( u, function( k, v ) {
					$(v).remove();
				});
				u = [];
				
				// 执行 complete
				a[2].apply(a[0]);
				
				inner();
				
				document.write = o[0];
				document.writeln = o[1];
				
				// 运行 下一个 ad
				handle();				
				return false;
			}
			var js = j.shift();
			
			
			var	c = function(){
				inner( js[0] );
				forcall();
			};
			
			if ( js[1] ) {
				$.globalEval( js[2] );
				return c();
			}
			
			var e = $('<script></script>').attr({ type: 'text/javascript', src: js[2] })[0];
			if( e.readyState ) {
				e.onreadystatechange = function() {
					$.inArray( e.readyState, ['loaded', 'complete'] ) != -1 && c();
				};
			} else {
				e.onload = function() {
					c();
				};
			}
			
			// 插入到当前元素里面
			var g = $(js[0])[0];
			g.parentNode.insertBefore(e, g);
			
			// 这是插入到body里面
			//$('head')[0].appendChild(e);
			
		};
		// 循环加载
		forcall();
	};
	
	
	
	
	
	$(function(){
		$(window).load(function(){
			load = true;
			handle();
		});
	});
	
	
	$.fn.extend({
		'ad':function( b, c ) {
			b = b || function(){};
			c = c || function(){};
			ad.push([this,b,c]);
			if ( !run && load ) {
				handle();
			}
		}
	});
})(jQuery);
